


// 单例模式
// ⼀个类只能创建⼀个对象，即单例模式，该设计模式可以保证系统中该类只有⼀个实例，并提供⼀个
// 访问它的全局访问点，该实例被所有程序模块共享。⽐如在某个服务器程序中，该服务器的配置信息
// 存放在⼀个⽂件中，这些配置数据由⼀个单例对象统⼀读取，然后服务进程中的其他对象再通过这个
// 单例对象获取这些配置信息，这种⽅式简化了在复杂环境下的配置管理。
// 单例模式有两种实现模式：饿汉模式和懒汉模式


// 饿汉模式: 程序启动时就会创建⼀个唯⼀的实例对象。 因为单例对象已经确定， 所以⽐较适⽤于多
//线程环境中， 多线程获取单例对象不需要加锁， 可以有效的避免资源竞争， 提⾼性能。
// #include<iostream>

// class Singleton {
// private:
//  static Singleton _eton; //静态成员类内声明，类外定义
// private:
//  Singleton(){}
//  ~Singleton(){}
// public:
//  Singleton(const Singleton&) = delete;
//  Singleton& operator=(const Singleton&) = delete;
//  static Singleton& getInstance() 
//  {
//  return _eton;
//  }
// };


// Singleton Singleton::_eton;


// 懒汉模式:第⼀次使⽤要使⽤单例对象的时候创建实例对象。如果单例对象构造特别耗时或者耗费济
// 源(加载插件、加载⽹络资源等)， 可以选择懒汉模式， 在第⼀次使⽤的时候才创建对象。

// 懒汉模式
template <typename T> 
class Singleton { 
private:
 Singleton(){}
 ~Singleton(){}
public: 
 Singleton(const Singleton&) = delete;
 Singleton& operator=(const Singleton&) = delete;
 static T& getInstance() 
 { 
 static Singleton _eton;
 return _eton; 
 } 
}; 